<?php
/**
 * Created by PhpStorm.
 * User: YUWENXUAN
 * Date: 2017/4/7
 * Time: 10:24
 */


//count(); //计算数组中元素数目和对象;
//sizeof(); //是count()的别名；功能是一样的
//原型
//int count (minxed var [, int mode])



//array_count_values(); // 统计数组中所有值出现的次数 参数只有一个

//原型
//array array_count_values(array input)

eg:
$array = array(1, "php",1,"mysql","php");  //声明一个带有重复值的数组
$newArray = array_count_values($array);    // 统计数组$array中所有值出现的次数
print_r($newArray);     //输出：(array[1]=>2[php]=>2[mysql]=>1)



//array_unique(); //删除数组中重复的值，并返回没有重复值的新数组，只有一个参数

//原型
//array array_unique( array array);

$a = array("a"=>"php","b"=>"mysql","c"=>"php");  //声明一个带有重复值的数组
print_r(array_unique($a));     //删除重复值后输出 Array([a]=>php [b]=>mysql)

//回调函数

//array_filter(); //回调函数过滤数组中的元素，返回按用户自定义函数过滤后的新数组，参数两个。
//原型

//array array_filter(array input[,callback callback])

function myFun($var){
    if ($var%2 == 0) {
        return true;
    }
}
$array = array("a"=>1,"b"=>2,"c"=>3,"d"=>4,"e"=>5); //声明值为整数序列的数组
//使用函数array_filter()将自定义的函数名以字符串的形式传给第二个参数
print_r(array_filter($array,"myFun"));



//array_walk(); // 对数组中的每个元素应用回调函数处理。成功TRUE，失败，FALSE，三个参数
//原型
//bool array_walk(array &array,callback funcname[,mixed userdata])

function myFun1($value, $key){    // 定义一个回调函数接收两个参数
    echo "The key $key has the value $value <br>";   //将参数连接在一起输出
}

$lamp = array("a"=>"linux","b"=>"apache","c"=>"php","d"=>"mysql"); //定义一个数组$lamp
 array_walk($lamp,"myFun1"); //使用array_walk 函数传入一个数组和一个回调函数
/*执行输出结果是：
The key a has the value linux
The key b has the value apache
The key c has the value php
...*/
function myFun2($value,$key,$p){   //接收三个参数
    echo "$key $p $value<br>";   //将三个参数连续输出

}

array_walk($lamp,"myFun2","has the value");  // 使用array_walk传入三个参数
echo '<br>';
echo '<br>';

/*执行输出结果是：
  a has the value linux
  b has the value apache
  c has the value php
  d has the value mysql*/
function myFun3(&$value,$key){   //改变数组元素的值（请注意&$value传入引用）
    $value="Web";   //将改变原数组中每个元素的值
}
array_walk($lamp,"myFun3");   // 使用array_walk 函数传入两个参数，其中一个参数为引用
print_r($lamp);  //输出：Array([a]=>Web[b]=>Web[c]=>Web[d]=>Web)

echo '<br>';
echo '<br>';

function myFun4(&$value,$key){   //改变数组元素的值（请注意&$value传入引用）
    $value="Win";   //将改变原数组中每个元素的值
}
array_walk($lamp,"myFun4");   // 使用array_walk 函数传入两个参数，其中一个参数为引用
print_r($lamp);  //输出：Array([a]=>Web[b]=>Web[c]=>Web[d]=>Web)
echo '<br>';
echo '<br>';
function myFun5(&$value,$key){   //改变数组元素的值（请注意&$value传入引用）
//    $key="add1";   //将改变原数组中每个元素的值
    $value = "1245";

//    $key 键值无法直接这么改变
}
array_walk($lamp,"myFun5");   // 使用array_walk 函数传入两个参数，其中一个参数为引用
print_r($lamp);  //输出：Array([a]=>Web[b]=>Web[c]=>Web[d]=>Web)
echo '<br>';
echo '<br>';

//array_map(); //  可以处理对个数组，将回调函数作用到给定的数组的元素上，返回用户自定义函数后的数组


echo '<br>';

// 1 ，array_slice(); //在数组中根据条件取出一段值并返回
//原型
//array array_slice(array,  int offset[,int length[,bool presever_keys]])



// 2 ，array_splice();   //选择数组中一系列元素，但不返回，而是删除他们并用其他值代替
//如果提供了 第四个参数，则之前选择的那些元素将被第四个参数指定的数组取代，最后生成的数组将会返回。
//原型
//array array_splice(array &input, int offset[,int length[,array replacement]])


//3， array_merge();   //把一个或多个数组合并为一个数组，如果键名有重复，该键的键值为最后一个键名对应的值，后面的覆盖前面的
//原型
//array array_merge(array array1[,array array2[,array ....]])

//4, array_combine(); //通过合并两个数组来创建一个新数组
//原型
//array array_combine（array keys ,array values）

// 5, array_intersect(); //计算数组的交集  ，返回的结果数组包含所有在被比较的数组中，
//也同时出现在所有其他参数数组中的值。
//原型
//Array array_intersect(array array1,array array2[,array ......])


//6, array_diff();  // 返回两个数组的差集数组，返回的结果数组包含所有在被比较的数组中，
//但是不在任何其他参数数组中的元素值
//原型
//array array_diff(array array1,array array2[,array...])
















